/**
 * @file Atransfer_config.h
 * @author Moon
 * @brief Atransfer config
 * @version 0.0.1
 * @date 2022-08-11
 * 
 * @copyright (c) 2022 Moon
 * 
 */

#ifndef __ATRANSFER_CONFIG_H__
#define __ATRANSFER_CONFIG_H__

#define ATRANSFER_USR_RTOS                      1                       //是否使用FreeRTOS（1：使用，0：不使用）

#if ATRANSFER_USR_RTOS == 1
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"

#define ATRANSFER_MALLOC                        pvPortMalloc            //内存申请函数
#define ATRANSFER_FREE                          vPortFree               //内存释放函数
#define ATRANSFER_TICK_PER_SECOND               configTICK_RATE_HZ      //时基频率（HZ）
#define ATRANSFER_GET_TICK_COUNT                xTaskGetTickCount       //获取时基函数
#else
#include "public_heap4.h"
#define ATRANSFER_MALLOC                        NoRtos_Malloc
#define ATRANSFER_FREE                          NoRtos_Free
#define ATRANSFER_TICK_PER_SECOND               1000                    //时基频率（HZ）
#define ATRANSFER_GET_TICK_COUNT                0                       //获取时基函数
#endif

#define ATRANSFER_USE_UPDATA                    1                       //是否使用shell升级（1：使用，0：不使用）

#if ATRANSFER_USE_UPDATA == 1
#include "ParmManage.h"
#define ATRANSFER_IAP_DEFAULT_DEVICE_ID         (uint32_t)(0x01010001)
#define ATRANSFER_IAP_UPDATE_FLAG               (uint32_t)(0x01020304)
#define ATRANSFER_PP_UPDATE_FLAG                PP_UPDATE_FLAG
#define ATRANSFER_PP_DEVICE_ID_INFO             PP_DEVICE_ID_INFO
#define ATRANSFER_PP_UPDATE_SHA256              PP_UPDATE_SHA256
#define ATRANSFER_PPGetInitFlag                 PPGetInitFlag   
#define ATRANSFER_PPItemIWrite                  PPItemIWrite  
#define ATRANSFER_PPItemRead                    PPItemRead  
#define ATRANSFER_PPUpdateInfoCopyToFlash       PPUpdateInfoCopyToFlash

#define ATRANSFER_USE_AMEMORY                       1                       //使用存储管理
#if ATRANSFER_USE_AMEMORY == 1
#include "A_memory.h"
#define ATRANSFER_FLASH_START_ADDR                  (0x00000000)            //Flash 升级起始地址
#define ATRANSFER_FLASH_AREA_SIZE                   Amem_Get_AreaSize(AMEM_String, "IAP")                   //Flash 升级大小
#define ATRANSFER_FLASH_READ_FUN(data,addr,len)     Amem_Area_Read(AMEM_String, "IAP", data, addr, len)     //IAP flash读函数
#define ATRANSFER_FLASH_WRITE_FUN(data,addr,len)    Amem_Area_Write(AMEM_String, "IAP", data, addr, len)    //IAP flash写函数
#define ATRANSFER_FLASH_ERASE_FUN(addr,len)         Amem_Area_Erase(AMEM_String, "IAP", addr, len)          //IAP flash擦函数
#else
#include "w25qxx.h"
#define ATRANSFER_FLASH_START_ADDR                  (0x00000000)            //Flash 升级起始地址
#define ATRANSFER_FLASH_AREA_SIZE                   (0x7C000)               //Flash 升级大小
#define ATRANSFER_FLASH_READ_FUN                    W25QXX_Read             //UPD flash读函数
#define ATRANSFER_FLASH_WRITE_FUN                   W25QXX_Write_NoCheck    //UPD flash写函数
#define ATRANSFER_FLASH_ERASE_FUN                   W25QXX_erase            //UPD flash擦函数
#endif
#include "stm32f4xx.h"
#define ATRANSFER_SYSTEM_RESET_FUN()                NVIC_SystemReset()
#endif

#endif
